package acmCoder;

import java.util.Scanner;


//将学生从一开始按顺序依次编号，并排成一行横队，训练的规则如下：从头开始一至二报数，凡报到二的出列剩下的依次向前靠拢，
//再从头开始进行一至三报数，凡报到三的出列，剩下的依次向前靠拢，继续从头开始进行一至二报数...
//以后每次从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。
public class ArmyBaoShu {

	static int studentNumber, r, finalcnt;  //r为计数
	static boolean is2;  //最后一次是报到2出列还是报到3出列
    //x是队列中的人数，m是报到几出列
	public static void dfs(int x, int m) {
		//如果队列中的人数不超过3人
		if (x <= 3) {
			finalcnt = x;
			is2 = (m == 3);
			return;
		}
		++r;
		dfs(x - x / m, m == 2 ? 3 : 2); //如果这次 m 为2，下次就为3；反之亦然
	}

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int testCount = scanner.nextInt(); //测试的次数
		studentNumber = scanner.nextInt();
		while (testCount-- > 0) {
			studentNumber = scanner.nextInt();
			r = 0;
			dfs(studentNumber, 2);
			System.out.printf("1");  //1总是最后剩下的
			for (int i = 2; i <= finalcnt; ++i) {
				int tmp = i;
				for (int j = 0; j < r; ++j) {
					if (is2) {
						//如果是报到2出列，则现在对应的序列原来的序列为 2 * temp - 1
						//比如现在的是1 2 3.（1 2 3 4 5 报到二的出列，这个序列是重新聚拢之后的）
						//2对应的就是 2 * 2 - 1；3对应的就是 3 * 2 -1
						tmp = tmp * 2 - 1;
					} else {
						//1 2 3 4 5 ，那么之前的就是1 2 3 4 5 6 7（报到3的出列之后再聚拢）
						//比如3 对应的是原来的4  （3 * 3 - 1 ） /  2 = 4
						tmp = (tmp * 3 - 1) / 2;
					}
					is2 = !is2;
				}
				System.out.printf(" %d", tmp);
			}
			System.out.printf("\n");
		}
		scanner.close();
	}
}
